﻿using PersistenceLayer.DAL;
using PersistenceLayer.Model;
using SupportLayer.Constantes.OUTROS;
using SupportLayer.Constantes.PRODUTO;
using SupportLayer.Enums;
using SupportLayer.Objetos.Produto;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ByBikeShop.Administracao.Pages
{
	public partial class FotosProduto : BaseAdmin
	{
		private UCs.Mensagem.mensagens ucMensagem;
		public Int64 GetProdutoID
		{
			get
			{
				if ((Request.QueryString[OUTROS.PRODUTO_ID] == null) || (Request.QueryString[OUTROS.PRODUTO_ID].ToString() == ""))
				{
					return 0;
				}

				return Convert.ToInt64(Request.QueryString[OUTROS.PRODUTO_ID].ToString());
			}
		}

		protected void Page_Load(object sender, EventArgs e)
		{
			base.PageLoad(true);
		}

		public override void CarregaDados()
		{
			try
			{
				if (GetProdutoID <= 0)
					throw new ApplicationException("Erro ao recuperar o produto! Tente novamente!");

				PersistenceLayer.Model.Produto p = new ProdutoDAL().Obter(GetProdutoID);
				imgFotoPrincipal.ImageUrl = ResolveUrl("/Imagens" + p.Foto_Principal);
			}
			catch (Exception ex)
			{
				ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "a", "alert('" + ex.Message + "');", true);
			}
		}

		public override void CarregaGrid()
		{
			grdOutrasFotos.AutoGenerateColumns = false;
			grdOutrasFotos.Columns.Clear();

			grdOutrasFotos.Columns.Add(Util.Gridview.GeraBoundField(FOTOS.ID, "ID"));
			grdOutrasFotos.Columns.Add(Util.Gridview.GeraImageField(FOTOS.CAMINHO, 150));
			grdOutrasFotos.Columns.Add(Util.Gridview.GeraButtonField(ButtonType.Image, "", "deletar", "/Imagens/Icones/delete.svg"));
			grdOutrasFotos.Columns.Add(Util.Gridview.GeraLinkButtonField("", "principal", "Principal"));
		}

		public override void PopulaGrid()
		{
			try
			{
				DataTable dt = new DataTable();
				dt.Columns.Add(FOTOS.ID);
				dt.Columns.Add(FOTOS.CAMINHO);

				var lf = new Produto_FotosDAL().ListarPorProdutoID(GetProdutoID);

				if(lf == null)
					return;

				foreach (Produto_Fotos pf in lpf)
					dt.Rows.Add(pf.ID, ResolveUrl("/Imagens" + pf.Caminho));

				grdOutrasFotos.DataSource = dt;
				grdOutrasFotos.DataBind();

				grdOutrasFotos.Columns[0].Visible = false;
			}
			catch (Exception)
			{

				throw;
			}
		}

		protected void grdOutrasFotos_RowDataBound(object sender, GridViewRowEventArgs e)
		{
			if (!(e.Row.RowType == DataControlRowType.DataRow))
				return;
		}

		protected void grdOutrasFotos_RowCommand(object sender, GridViewCommandEventArgs e)
		{
			try
			{
				Int64 ID = Util.Gridview.GetID(sender, e);
				ProdutoDAL pd = new ProdutoDAL();

				if (e.CommandName == "principal")
				{
					Produto p = pd.Obter(GetProdutoID);
					//ProdutoClass Produto = BProduto.SelectProduto(GetProdutoID, false, false);
					//FotosClass Foto = BProduto.SelectFoto(ID);
					Produto_Fotos f = new Produto_FotosDAL().Obter(ID);
					p.Foto_Principal = f.Caminho;

					pd.Atualizar(p);
					Response.Redirect(string.Format("FotosProduto.aspx?{0}={1}&{2}={3}", OUTROS.ACAO, (int)Acao.EDITAR, OUTROS.PRODUTO_ID, GetProdutoID));
				}
				else if (e.CommandName == "deletar")
				{
					Produto_FotosDAL pfd = new Produto_FotosDAL();
					pfd.Delete(pfd.Obter(ID));
					Response.Redirect(string.Format("FotosProduto.aspx?{0}={1}&{2}={3}", OUTROS.ACAO, (int)Acao.EDITAR, OUTROS.PRODUTO_ID, GetProdutoID));
				}
			}
			catch (Exception)
			{
				throw;
			}
		}

		protected void btnUpload_Click(object sender, EventArgs e)
		{
			try
			{
				if (!fupImagens.HasFile)
					throw new ApplicationException("");

				//Util.Imagens.SalvaUnicaImagem(fupImagens, Server.MapPath("/Imagens/Fotos_Produtos/"), new string[] { "image/jpg", "image/png", "image/bmp" });

				if ((fupImagens.FileName.EndsWith(".jpg")) ||
					(fupImagens.FileName.EndsWith(".png")) ||
					(fupImagens.FileName.EndsWith(".jpeg")))
				{
					string guid = Guid.NewGuid().ToString() + System.IO.Path.GetExtension(fupImagens.FileName);

					fupImagens.SaveAs(Server.MapPath("~/Imagens/Fotos_Produtos/" + guid));

					Produto_Fotos pf = new Produto_Fotos();
					pf.Caminho = "/Fotos_Produtos/" + guid;
					pf.Produto_ID = GetProdutoID;

					new Produto_FotosDAL().Adicionar(pf);

					Response.Redirect(string.Format("FotosProduto.aspx?{0}={1}&{2}={3}", OUTROS.ACAO, (int)Acao.EDITAR, OUTROS.PRODUTO_ID, GetProdutoID));
				}

			}
			catch (Exception ex)
			{
				string msg = "";

				if (ex.Message.ToLowerInvariant().Contains("invalid file type"))
					msg = "O formato do arquivo não é suportado! Escolha uma imagem jpg, png ou bmp!";
				else
					msg = ex.Message;

				ucMensagem = (UCs.Mensagem.mensagens)LoadControl(ResolveUrl("/Administracao/UCs/Mensagem/mensagens.ascx"));
				ucMensagem.TipoMensagem = TiposMensagens.Erro;
				ucMensagem.Mensagem = ex.Message;
				placeMensagem.Controls.Add(ucMensagem);
			}
		}

		public IEnumerable<Produto_Fotos> lpf { get; set; }
	}
}